package com.baizhi.realm;

import com.baizhi.dao.AdminDAO;
import com.baizhi.entity.Admin;
import org.apache.shiro.authc.*;
import org.apache.shiro.realm.AuthenticatingRealm;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 自定义Realm，将默认从配置文件中查询数据，改为从数据库查询
 * 调用DAO方法,从数据库查询，查到之后封装成info返回
 *
 *
 * 1、继承抽象类AUthenticatingRealm
 * 2、实现获取认证信息的方法
 *
 */
public class MyRealm extends AuthenticatingRealm {

    @Autowired
    private AdminDAO adminDAO;

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        /**
         * 1、从token令牌中获取用户名
         * 2、通过DAO方法查询用户信息
         * 3、查出的对象不为空，封装info,返回
         *
         */

        //1
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        String username = token.getUsername();

        //2
        Admin admin = adminDAO.selectByUsername(username);

        //3
        if (admin != null){
            /**
             * 查询到用户的用户名
             * 查询到用户的密码
             * 当前对象的名字
             *
             */
            System.out.println("this = " + this);
            System.out.println("this.getName() = " + this.getName());
            return new SimpleAuthenticationInfo(admin.getUsername(),
                    admin.getPassword(),
                    this.getName());
        }
        return null;
    }
}
